#include <func.h>
// 第一个参数命令的名字（字符串，登入是login），第二个是要操作的文件目录
#define LOG_CHECK(opt, arg)                                                                                               \
{                                                                                                                     \
    if (strcmp(opt, "login") == 0) {                                                                                      \
        syslog(LOG_DEBUG, "user: %s login core_file:%s : %d , time : %s", arg, __FILE__, __LINE__, __TIME__);         \
    } else {                                                                                                          \
        syslog(LOG_DEBUG, "cmd: %s dir : %s  core_file:%s : %d , time : %s", opt, arg, __FILE__, __LINE__, __TIME__); \
    }                                                                                                                 \
}

#define MYSQL_CONNECT_CHECK(ret, mysql){    \
    if(ret == NULL)     \
        fprintf(stderr, "%s\n", mysql_error(mysql));    \
}

#define MYSQL_QUERY_CHECK(ret, mysql){  \
    if(ret != 0)    \
        fprintf(stderr, "%s\n", mysql_error(mysql)); \
}

#define MD5_LENGTH 128

typedef struct tran_s{
    int length;
    char data[4096];
}tran_t;

typedef struct tran_name_s{
    int length;
    int offset;
    char data[4096];
}train_name_t;

int recvn(int netfd, void* buf, int length);
// 根据现在id与path字符串和username得到对应的id，失败返回-1
int getAbsolutePathId(int id_now,const char* path, const char* username, MYSQL * mysql);

// 登入，并且得到当前文件夹
int login(int netfd, char* name, MYSQL* mysql);
int getCurrFolder(char* username, MYSQL* mysql);

// 在数据库中寻找arg目录，若找到返回那个目录在数据库中的id
// 出错返回-1
int cdFunc(const char* user, const char* arg, int* curr_folder, MYSQL* mysql); 

// 在数据库中找到arg目录，找到返回目录下级的所有行
// 出错返回-1
int ls(char* msg, const char* user, const char* arg, int curr_folder, MYSQL* mysql);

// 打印当前工作目录
int pwd(char* working_dir, int curr_folder, MYSQL* mysql);

int isInThisList(char *arg);
int getsTextFunc(const char* arg, int retM, int netfd);
void cutstr(char * input,char *filename);

int putsTextFunc(const char* username, const char* arg,int netfd, MYSQL * mysql, int id_now); 

// 下载对应目录下的文件
int getsFunc(const char* user, const char* arg, int curr_folder, int netfd, MYSQL* mysql);

// 把数据库中对应文件的tomb值设为1
int removeFunc(int id_now,const char *arg,const char* user,MYSQL *mysql);
// 把数据库中对应空目录的tomb值设为1
int rmdirFunc(int id_now,const char *arg,const char* user,MYSQL *mysql);
// 往数据库中插入一条信息
int mkdirFunc(int id_now,const char *arg, const char *user,MYSQL *mysql);

char* format(const char *p);
int idtoPath(int id,char *path,MYSQL *mysql);
int isDir(int id, MYSQL *mysql);
int isEmpty(int id,MYSQL *mysql);
int isTomb1(int id, MYSQL *mysql);



void error_send(int ret, int netfd);
void func_send(int ret, int netfd, char* msg);
